// This is a simple macro named `say_hello`.
macro_rules! say_hello {
    // `()` indicates that the macro takes no argument.
    () => {
        // The macro will expand into the contents of this block.
        println!("Hello!")
    };
}
// 宏是用来展开代码的
fn main() {
    // This call will expand into `println!("Hello!")`
    say_hello!()
}

// 宏用来避免重复代码，提高代码的可读性和可维护性。

// Domain-specific languages (DSLs) are a type of macro that are used to create domain-specific languages.
// 领域特定语言（DSL）是一种特定领域的语言，它是一种使用宏来创建特定领域语言的技术。

// Variadic interfaces are a type of macro that are used to create interfaces that can take a variable number of arguments.
// 可变参数接口是一种宏，用于创建可以接受可变数量参数的接口。
// 类似于println!宏，可变参数接口可以接受任意数量的参数，并将它们打印到控制台。